/* 这是一个从程序内部执行另一个程序的简单程序。
 * 程序通过将子进程进行分支来执行命令。子进程执行一个execvp函数调用，用对应于这个命令的映象来重写其进程映象。
 * 持有原始进程映象的父进程用重启库（restart.h）中的r_wait函数等待子进程。
 * 如果被信号中断，r_wait函数就会重启它的wait函数
 * */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include "restart.h"

int main(int argc, char *argv[]){
	pid_t child_pid;

	if(argc < 2){
		fprintf(stderr, "Usage: %s commandd arg1 arg2 ... \n", argv[0]);
		return 1;
	}

	child_pid = fork();

	if(child_pid == -1){
		perror("Failed to fork");
		return 1;
	}else if(child_pid == 0){
		execvp(argv[1], &argv[1]);
		perror("Child dfailed to execvp the command");
		return 1;
	}else{
		perror("Parent failed to wait");
		return 1;
	}

	return 0;
}
